#include<bits/stdc++.h>
#define sd(n) scanf("%d",&n) 
#define sld(n) scanf("%lld",&n)
#define pd(n) printf("%d", (n))
#define pld(n) printf("%lld", n)
#define et()  puts("")
#define lyh(i,a,b) for(int i=a;i<b;i++)
#define hyl(i,a,b) for(int i=a;i>=b;i--)
#define push_back pb;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define fi first
#define se second
#define pii pair<int, int>;
#define vi vector<int>;
#define yesno(condition) if(condition)cout<<"YES\n";else cout<<"NO\n";
typedef long long int ll;
using namespace std;
//----------------------------------------------------------------------------//
//指数枚举dfs,从1开始
const int N=20;//n最多取20
int n;//最多有多少个数
int st[N];
vector<vector<int>> ways;//记录方案
void dfs(int u)
{
	//结束条件
	if(u>n)
	{
		vector<int> tmp;//记录此时的状态
		for(int i=1;i<=n;i++)
		{
			if(st[i]==1) tmp.pb(i);
		}
		ways.pb(tmp);
	}

	st[u]=0;//先走0的情况
	dfs(u+1);
	st[u]=0;//恢复现场，可省略

	st[u]=1;
	dfs(u+1);
	st[u]=0;
}
int main()
{
	sd(n);
	dfs(1)；

	for(int i=0;i<ways.size();i++)
	{
		for(int j=0;j<ways[i].size();j++)
		{
			if(ways[i][j]!=0)
			{
				cout<<ways[i][j]<<" ";
			}
			cout<<endl;
		}
	}

	return 0;
}